package org.ccay.core.base;

import java.io.Serializable;

import org.ccay.core.request.IUserPrincipal;
import org.ccay.core.request.RequestContextException;
import org.ccay.core.request.impl.RequestContext;
import org.codehaus.jackson.annotate.JsonIgnoreProperties;

/**
 * VO基类，抽象类
 *  此类中禁止继续添加新的字段，会影响SOAP服务的兼容性。
 * 
 * @since 2011-8-25
 */
@JsonIgnoreProperties(ignoreUnknown=true,value={"appName","scope","currentUserId"})
public abstract class BaseVO implements Serializable {

	private static final long serialVersionUID = -4449311091992559836L;

	/**
	 * 获取应用名，用于除角色管理之外的模块
	 * @return appName
	 * @exception RequestContextException RequestContext不存在时此方法会抛出系统异常
	 */	
	public String getAppName() {
		return RequestContext.getCurrent().getApplication().getAppName();
	}

	/**
	 * 获取Scope，用于角色相关模块（RequestContext不存在时此方法会抛出系统异常）
	 * @return scope
	 * @exception RequestContextException RequestContext不存在时此方法会抛出系统异常
	 */
	public String getScope() {
		return RequestContext.getCurrent().getApplication().getScope();
	}
	
	/** 
	 * 获取当前用户登录的ID	
	 * 
	 * @since 2012-7-9
	 * @return
	 * @exception RequestContextException RequestContext不存在、或者用户不存在时此方法会抛出系统异常
	 */
	public long getCurrentUserId(){
		IUserPrincipal user = RequestContext.getCurrent().getUser();
		if(user != null){
			return user.getUserId();
		}
		throw new RequestContextException();
	}
}
